package com.utils;

import java.util.Random;
import org.springframework.stereotype.Component;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import java.text.DecimalFormat;
import java.util.Objects;

/**
 * CommonUtil 类：提供一些常用的工具方法。
 * 包含获取随机字符串、随机验证码和处理Excel单元格值的方法。
 *
 * @author team10
 */
@Component
public class CommonUtil {

    /**
     * 获取随机字符串
     *
     * @param num 生成随机字符串的长度
     * @return 随机字符串
     * @author team10
     */
    public static String getRandomString(Integer num) {
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";  // 随机字符串的字符集
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < num; i++) {
            int number = random.nextInt(base.length());  // 从字符集中随机选择字符
            sb.append(base.charAt(number));  // 将字符添加到结果字符串
        }
        return sb.toString();  // 返回生成的随机字符串
    }

    /**
     * 获取随机验证码
     *
     * @param num 生成验证码的长度
     * @return 随机验证码
     * @author team10
     */
    public static String getRandomNumber(Integer num) {
        String base = "0123456789";  // 随机验证码的字符集
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < num; i++) {
            int number = random.nextInt(base.length());  // 从字符集中随机选择数字
            sb.append(base.charAt(number));  // 将数字添加到结果验证码
        }
        return sb.toString();  // 返回生成的随机验证码
    }

    /**
     * 获取Excel单元格的值
     *
     * @param cell Excel中的单元格对象
     * @return 单元格的值，类型为字符串
     * @author team10
     */
    public static String getCellValue(Cell cell) {
        String resultValue = "";
        // 判空
        if (Objects.isNull(cell)) {
            return resultValue;  // 如果单元格为空，返回空字符串
        }

        // 拿到单元格类型
        int cellType = cell.getCellType();
        switch (cellType) {
            // 字符串类型
            case Cell.CELL_TYPE_STRING:
                resultValue = StringUtils.isEmpty(cell.getStringCellValue()) ? "" : cell.getStringCellValue().trim();  // 获取字符串并去除空白
                break;
            // 布尔类型
            case Cell.CELL_TYPE_BOOLEAN:
                resultValue = String.valueOf(cell.getBooleanCellValue());  // 获取布尔值并转换为字符串
                break;
            // 数值类型
            case Cell.CELL_TYPE_NUMERIC:
                resultValue = new DecimalFormat("#.######").format(cell.getNumericCellValue());  // 获取数字值并格式化为字符串
                break;
            // 取空串
            default:
                break;
        }
        return resultValue;  // 返回单元格的值
    }

}
